Generally described, a connection pool is a cache of database connection objects. The connection objects represent physical database connections that can be used by a software application to connect to a database. At runtime, an application can request a connection from the pool. If the pool contains a connection that can satisfy the request, it returns the connection to the application. If no connection is found, a new connection can be created and returned to the application. The application uses the connection to access the database to perform work, and then returns the connection to the pool. The connection can then be made available for subsequent connection requests.
Creating connections can be costly both in terms of time and resources. For example, tasks such as network communication, authentication, transaction enlistment, and memory allocation all contribute to the amount of time and resources it takes to create a connection object. Connection pools allow reuse of such connection objects, and reduce the number of times that objects must be created.
One example of a connection pool is Oracle Universal Connection Pool (UCP), which provides a connection pool for caching JDBC connections. Java applications that are database-intensive can use the connection pool to improve performance and utilization of system resources. A UCP connection pool can use any JDBC driver to create physical connections that are then maintained by the pool. The connection pool can be configured with properties used to optimize pool behaviors, based on the performance and availability requirements of an application.